package junior.util.date;

import java.beans.PropertyEditorSupport;
import java.util.Date;

import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.InitBinder;

/**
 * 常用于BaseController中，设置Date类型转换的绑定：<br/>
 * 转换字符串总是{@link DateFormat#DATE_DASH_TIME_COLON}格式
 * 
 * @see InitBinder
 * @author ZhangXiaoye
 * @date 2016年7月10日 下午5:55:49
 */
public class OdyDateEditor extends PropertyEditorSupport{
	
	private final DateFormat[] formats;
	
	/**
	 * parse顺序默认 {@link DateFormat#DATE_DASH_TIME_COLON} 然后 {@link DateFormat#DATE_DASH}
	 * 
	 * @author ZhangXiaoye
	 * @date 2016年7月10日 下午5:58:12
	 */
	public OdyDateEditor(){
		this.formats = new DateFormat[]{
				DateFormat.DATE_DASH_TIME_COLON,
				DateFormat.DATE_DASH
		};
	}
	
	/**
	 * 根据指定的格式来parse
	 * 
	 * @param formats
	 * @author ZhangXiaoye
	 * @date 2016年7月10日 下午5:58:09
	 */
	public OdyDateEditor(DateFormat... formats){
		this.formats = formats;
	}
	
	/**
	 * Parse the Date from the given text, using the specified DateFormat.
	 */
	@Override
	public void setAsText(String text) throws IllegalArgumentException {
		if (!StringUtils.hasText(text)) {
			setValue(null);
		}
		for(DateFormat format: formats){
			if(format.canParse(text)){
				setValue(format.parse(text));
				return;
			}
		}
		throw new IllegalArgumentException("Could not parse date: " + text);
	}

	/**
	 * Format the Date as String, using the specified DateFormat.
	 */
	@Override
	public String getAsText() {
		Object date = getValue();
		if(date != null && date instanceof Date){
			return DateFormat.DATE_DASH_TIME_COLON.format((Date) date);
		}
		return "";
	}

}
